package com.zyz.satoken;

import cn.dev33.satoken.stp.StpUtil;
import com.zyz.satoken.pojo.User;
import lombok.val;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录，浏览器访问： http://localhost:8081/user/doLogin?username=zhang&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对 
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            // 获取当前会话的 token 值
            System.out.println("StpUtil.getTokenValue() = " + StpUtil.getTokenValue());
            // 获取当前`StpLogic`的 token 名称
            System.out.println("StpUtil.getTokenName() = " + StpUtil.getTokenName());
            // 获取指定 token 对应的账号id，如果未登录，则返回 null
            StpUtil.getLoginIdByToken("aaa");
            // 获取当前会话剩余有效期（单位：s，返回-1代表永久有效）
            System.out.println("StpUtil.getTokenTimeout() = " + StpUtil.getTokenTimeout());
            // 获取当前会话的 token 信息参数
            System.out.println("StpUtil.getTokenInfo() = " + StpUtil.getTokenInfo());

            // 获取session
            System.out.println("StpUtil.getSession() = " + StpUtil.getSession());
            // 没有session时创建
            System.out.println("StpUtil.getSession(true) = " + StpUtil.getSession(true));
            System.out.println("StpUtil.getSessionTimeout() = " + StpUtil.getSessionTimeout());
            System.out.println("StpUtil.getTokenSession() = " + StpUtil.getTokenSession());
            System.out.println("----------------------");
            User user = new User();
            user.setUserId(111);
            user.setUsername("张三");
            StpUtil.getSession().set(StpUtil.getLoginIdAsString(),user);
            User sessionUser =(User) StpUtil.getSession().get(StpUtil.getLoginIdAsString());
            System.out.println("user = " + user);
            return "登录成功";
        }
        return "登录失败";
    }

    // 查询登录状态，浏览器访问： http://localhost:8081/user/isLogin
    @RequestMapping("/isLogin")
    public String isLogin() {
        System.out.println("StpUtil.getLoginId() = " + StpUtil.getLoginId());
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    @RequestMapping("/isLogout")
    public String isLogout() {
//        StpUtil.kickout(StpUtil.getLoginId()); // 踢人下线
        StpUtil.logout(); // 人为下线
        return "当前是否已经登陆:" + StpUtil.isLogin();
    }

    @RequestMapping("/isPermission")
    public String isPermission() {
        System.out.println("StpUtil.getPermissionList() = " + StpUtil.getPermissionList());
        System.out.println("StpUtil.hasPermission(\"101\") = " + StpUtil.hasPermission("101"));
        System.out.println("StpUtil.hasPermission(\"nihao\") = " + StpUtil.hasPermission("nihao"));
        return "成功~";
    }

}